/**
 * 
 */
package ar.edu.ufasta.presupuestos.logica.entidades;

import java.util.Date;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import ar.edu.ufasta.presupuestos.logica.entidades.estados.Estado;
import ar.edu.ufasta.presupuestos.logica.entidades.presupuesto.Presupuesto;
import ar.edu.ufasta.presupuestos.servicios.persistencia.PersistenceFacade;

/**
 * Entidad que representa los clientes registrados en el sistema
 * @author Carlos Gaspar
 * @author Juan Pablo Ruiz
 *
 */
public class Cliente extends EntidadBase{

	private String nombre;
	private String apellido;
	//private String direccion;
	private String telefono;
	private String celular;
	private String usuario;
	private String password;
	private String email;
	private Date fechaCreacion;
	private Domicilio domicilio;
	
	/**
	 * Getter de la propiedad Apellido
	 * @return apellido
	 */
	public String getApellido() {
		return apellido;
	}
	/**
	 * Setter de la propiedad Apellido
	 * @param apellido
	 */
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	/*
	public String getDireccion() {
		return direccion;
	}
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}*/
	/**
	 * Getter de la propiedad E-mail 
	 * @return email
	 */
	public String getEmail() {
		return email;
	}
	
	/**
	 * Setter de la propiedad E-mail
	 * @param email
	 */
	public void setEmail(String email) {
		this.email = email;
	}
	
	/**
	 * Getter de la propiedad FechaCreacion
	 * @return FechaCreacion
	 */
	public Date getFechaCreacion() {
		return fechaCreacion;
	}
	/**
	 * Setter de la propiedad FechaCreacion
	 * @param fechaCreacion
	 */
	public void setFechaCreacion(Date fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}
	
	/**
	 * Getter de la propiedad Nombre
	 * @return nombre
	 */
	public String getNombre() {
		return nombre;
	}
	/**
	 * Setter de la propiedad Nombre
	 * @param nombre
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	/**
	 * Getter de la propiedad Password
	 * @return password
	 */
	public String getPassword() {
		return password;
	}
	/**
	 * Setter de la propiedad Password
	 * @param password
	 */
	public void setPassword(String password) {
		this.password = password;
	}
	/**
	 * Getter de la propiedad Telefono
	 * @return telefono
	 */
	public String getTelefono() {
		return telefono;
	}
	/**
	 * Setter de la propiedad Telefono
	 * @param telefono
	 */
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	/**
	 * Getter de la propiedad Usuario
	 * @return usuario
	 */
	public String getUsuario() {
		return usuario;
	}
	/**
	 * Setter de la propiedad Usuario
	 * @param usuario
	 */
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}
	/**
	 * Getter de la propiedad Domicilio
	 * @return the domicilio
	 */
	public Domicilio getDomicilio() {
		return domicilio;
	}
	/**
	 * Setter de la propiedad Domicilio
	 * @param domicilio the domicilio to set
	 */
	public void setDomicilio(Domicilio domicilio) {
		this.domicilio = domicilio;
	}
	/**
	 * Getter de la propiedad Celular
	 * @return the celular
	 */
	public String getCelular() {
		return celular;
	}
	/**
	 * Setter de la propiedad Celular
	 * @param celular the celular to set
	 */
	public void setCelular(String celular) {
		this.celular = celular;
	}
	
	/**
	 * Obtiene todos los presupuestos del cliente actual
	 * @return list of Presupuestos
	 */
	@SuppressWarnings("unchecked")
	public List<Presupuesto> getAllPresupuestos(){
		List<Presupuesto> presupuestos = null;
		Map<String, String> condicion = new Hashtable<String, String>();
		condicion.put("id_cliente", this.getIDValue().toString());
		presupuestos = (List<Presupuesto>) PersistenceFacade.getInstance().search(Presupuesto.class, condicion);
		return presupuestos;
	}
	
	/**
	 * Obtiene todos los presupuestos que tienen Estado X
	 * @param estado x
	 * @return list of presupuestos
	 */
	@SuppressWarnings("unchecked")
	public List<Presupuesto> getAllPresupuestosPorEstado(Estado estado){
		List<Presupuesto> presupuestos = null;
		Map<String, String> condicion = new Hashtable<String, String>();
		condicion.put("id_cliente", this.getIDValue().toString());
		condicion.put("id_estado", estado.getCode().toString());
		presupuestos = (List<Presupuesto>) PersistenceFacade.getInstance().search(Presupuesto.class, condicion);
		return presupuestos;
	}
	
	/**
	 * Indica si el cliente tiene o no presupuestos asociados
	 * @return boolean value
	 */
	public Boolean presupuestosAsociados(){
		Boolean asociados = Boolean.FALSE;
		List<Presupuesto> presupuestos = this.getAllPresupuestos();
		if(presupuestos!=null && !presupuestos.isEmpty()){
			asociados = Boolean.TRUE;
		}
		return asociados;
	}
	
}
